<?php

namespace app\common\controller;

use support\Request;
use think\facade\Db;
use think\facade\Cache;
use app\BaseController;

/**
 * 公共的方法
 */
class Common extends BaseController
{

    /**
     * 文件上传
     */
    public function upload(Request $request)
    {
        if ($request->isPost()) {
            $method = $request->input('method');

            $respJson = \app\common\service\Uploader::upload($request);
            $result = json_decode($respJson->getContent(), true);
            if ($method == 'layui') {
                // layui 编辑器 上传
                return json([
                    'code' => 0, // 0表示成功，其它失败
                    'msg' => '上传成功',
                    'filepath' => $result['filepath'],
                    'data' => [
                        'src' => $result['full_filepath'],
                        'title' => ''
                    ]
                ]);
            } elseif ($method == 'tinymce') {
                // tinymce 编辑器 上传
                return json([
                    'code' => 1, // 1表示成功，其它失败
                    'msg' => '上传成功',
                    'location' => $result['full_filepath'],
                    'data' => [
                        'src' => $result['full_filepath'],
                        'title' => ''
                    ]
                ]);
            }

            return $respJson;
        }

        // 多文件上传
        return view('multi_upload');
    }

    /**
     * 文件下载
     */
    public function download(Request $request)
    {
        //header('Content-type:text/html;charset=utf-8');
        $file_url = $request->input('file');
        $file_url = urldecode($file_url);
        //$file_size = filesize($file);
        $file = file_get_contents($file_url);
        $file_size = strlen($file);
        $file_name = basename($file_url);
        /*$filepath = 'filepath';
        $filename = 'filename';
        $file = $filepath . '/' . $filename;
        // 用以解决中文不能显示出来的问题
        $file = iconv('utf-8', 'gb2312', $file);
        // 首先要判断给定的文件存在与否
        if (!file_exists($file)) {
            exit('没有该文件文件');
        }*/
        $fp = fopen($file_url, 'r');
        // 下载文件需要用到的头
        header('Content-type: application/octet-stream');
        header('Accept-Ranges: bytes');
        header('Accept-Length:' . $file_size);
        header('Content-Disposition: attachment; filename=' . $file_name);
        $buffer = 1024;
        $file_count = 0;
        // 向浏览器返回数据
        while (!feof($fp) && $file_count < $file_size) {
            $file_con = fread($fp, $buffer);
            $file_count += $buffer;
            echo $file_con;
        }

        fclose($fp);

        /*
        ob_end_clean();
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); //强制页面不缓存
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Length: ' . $file_size);
        header('Content-Disposition: attachment; filename=' . $file_name);
        readfile($file_url);
        */
    }

    /**
     * Ajax 修改指定表数据字段  一般修改状态 比如 是否推荐 是否开启 等 图标切换的
     * table,id_name,id_value,field,value
     */
    public function changeTableVal(Request $request)
    {
        $params = $request->all();

        $table = $params['table']; // 表名
        $idName = $params['id_name']; // 表主键id名
        $idValue = $params['id_value']; // 表主键id值
        $field = $params['field']; // 修改哪个字段
        $value = $params['value']; // 修改字段值

        // 根据条件保存修改的数据
        Db::name($table)->where([$idName => $idValue])->save([$field => $value]);
    }
}
